﻿using clasesBase;
using Logica;
using System.Drawing;
using System.Windows.Forms;
using System;
using accesoDatos;

namespace PlanificacionProduccion
{
    public partial class FrmUsuarioDet : FrmABM
    {
        public FrmUsuarioDet()
        {
            InitializeComponent();
        }

        private void UsuarioDetalle_Load(object sender, System.EventArgs e)
        {
            datosRoles.DataSource = Rol.listarElementos(Rol.tablaBD);
            cmbRoles.DisplayMember = "nombre";
            cmbRoles.ValueMember = "id";

            if (base.idElemento != 0) mostrarDatos();
        }

        private void mostrarDatos()
        {
            Usuario elem = new Usuario(base.idElemento);

            txtId.Text = elem.ID.ToString();
            txtNombre.Text = elem.Nombre.ToString();
            //txtClave.Text = elem.Clave.ToString();  No se muestra nunca la clave
            cmbRoles.SelectedValue = elem.ObjRol.ID;
            chkDeBaja.Checked = elem.DeBaja;

            // El usuario actual no puede habilitarse/deshabilitarse a sí mismo
            if (Program.UsuarioActual.Trim().ToUpper().Equals(elem.Nombre.Trim().ToUpper()))
            {
                chkDeBaja.Enabled = false;
            }
        }

        private void btnGuardar_Click(object sender, System.EventArgs e)
        {
            quitarResaltado();
            if (camposCompletos())
            {
                if (Notificador.accionGuardarConfirmada())
                {
                    // Si se tratase de un elemento nuevo, el id correspondiente es 0.
                    int idElemento = txtId.Text.Trim() == "" ? 0 : Convert.ToInt32(txtId.Text);
                    string nombre = txtNombre.Text.Trim();
                    string clave = txtClave.Text.Trim();

                    Usuario elem = new Usuario(idElemento);
                    elem.Nombre = nombre;
                    elem.Clave = clave != "" ? clave : elem.Clave; // Si se especificó una clave nueva, la cambio... sino dejo la que estaba

                    bool usuarioDeBaja = chkDeBaja.Checked;
                    if (elem.DeBaja != usuarioDeBaja) // Si se cambia el estado de baja, lo actualizo, sino no...
                    {
                        elem.DeBaja = usuarioDeBaja;
                        if (usuarioDeBaja) elem.FechaBaja = DateTime.Today; // Si se lo da de baja, guardo la fecha actual
                    }

                    int idRol = cmbRoles.SelectedValue != null ? (int)cmbRoles.SelectedValue : 0;

                    if (elem.ObjRol.ID != idRol) elem.ObjRol = new Rol(idRol);

                    // Guardo la información
                    string error = elem.guardar();
                    Notificador.resultadoABM(idElemento == 0 ? TipoOperacionABM.ALTA : TipoOperacionABM.MODIFICACION, error);
                    if (error.Trim() == "") this.Close();
                }
            }
            else Notificador.camposNoCompletos();
        }

        private bool camposCompletos()
        {
            bool completos = true;

            int idUsuario = txtId.Text.Trim() == "" ? 0 : Convert.ToInt32(txtId.Text);

            if (txtNombre.Text.Trim() == "") { completos = false; lblNombre.ForeColor = Color.Red; }
            if (idUsuario == 0 && txtClave.Text.Trim() == "") { completos = false; lblClave.ForeColor = Color.Red; }
            if (cmbRoles.SelectedValue == null) { completos = false; lblRol.ForeColor = Color.Red; }

            return completos;
        }

        private void quitarResaltado()
        {
            lblNombre.ForeColor = Color.Black;
            lblClave.ForeColor = Color.Black;
            lblRol.ForeColor = Color.Black;
        }
    }
}
